﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;
using System.Data.SqlClient;

namespace BanHangCshap.Class.DAL
{
    public class clsBaseDAL
    {
        /// <summary>
        /// Hàm thực thi câu select không biến
        /// </summary>
        /// <param name="SPName">Tên Proc select</param>
        /// <returns>Một cái gọi là đa ta thế bồ (DataTable) được thẩy zề</returns>
        public DataTable Select(string SPName)
        {
            DataTable Dt = new DataTable();
            try
            {
                SqlCommand Cmd = new SqlCommand();
                Cmd.Connection = DatabaseStatic.conn;
                Cmd.CommandType = CommandType.StoredProcedure;
                Cmd.CommandTimeout = 30000;
                Cmd.CommandText = SPName;
                SqlDataAdapter YourDataAdapter = new SqlDataAdapter(Cmd);
                YourDataAdapter.Fill(Dt);
            }
            catch (Exception)
            {
                Dt = null;
            }
            return Dt;
        }

        /// <summary>
        /// Hàm thực thi câu select có biến
        /// </summary>
        /// <param name="SPName">Tên Proc có biến</param>
        /// <param name="ListPara">Danh sách tên biến dưới sql nha pa</param>
        /// <param name="ListValu">Danh sách giá trị biến</param>
        /// <returns>Một cái gọi là đa ta thế bồ (DataTable) được thẩy zề</returns>
        public DataTable Select(string SPName, string[] ListPara, object[] ListValu)
        {
            DataTable Dt = new DataTable();
            try
            {
                SqlCommand Cmd = new SqlCommand();
                Cmd.Connection = DatabaseStatic.conn;
                Cmd.CommandType = CommandType.StoredProcedure;
                Cmd.CommandTimeout = 30000;
                Cmd.CommandText = SPName;
                SqlParameter YourPara = null;
                for (int i = 0; i < ListPara.Length; i++)
                {
                    YourPara = new SqlParameter(ListPara[i], ListValu[i]);
                    Cmd.Parameters.Add(YourPara);
                }
                SqlDataAdapter YourDataAdapter = new SqlDataAdapter(Cmd);
                YourDataAdapter.Fill(Dt);
            }
            catch (Exception)
            {
                Dt = null;
            }
            return Dt;
        }

        /// <summary>
        /// Hàm thực thi câu Insert
        /// </summary>
        /// <param name="SPName">Tên Proc Insert</param>
        /// <param name="ListPara">Danh sách tên biến dưới sql</param>
        /// <param name="ListValu">Danh sách các giá trị biến sql</param>
        /// <returns>Trả zề cỉu True False || True là thực thi Oki, False là éo có thực thi đc</returns>
        public bool Insert(string SPName, string[] ListPara, object[] ListValu)
        {
            bool Oki = false;
            SqlCommand Cmd = DatabaseStatic.conn.CreateCommand();
            Cmd.CommandText = SPName;
            Cmd.CommandType = CommandType.StoredProcedure;
            Cmd.Transaction = DatabaseStatic.sqltrans;
            try
            {
                SqlParameter YourPara = null;
                for (int i = 0; i < ListPara.Length; i++)
                {
                    YourPara = new SqlParameter(ListPara[i], ListValu[i]);
                    Cmd.Parameters.Add(YourPara);
                }
                Cmd.ExecuteNonQuery();
                Oki = true;
            }
            catch (Exception)
            {
                Oki = false;
            }
            return Oki;
        }

        /// <summary>
        /// Hàm thực thi câu Update || Y chan Insert nhưng rãnh rổi zin nông nỏi
        /// </summary>
        /// <param name="SPName">Tên Proc Update</param>
        /// <param name="ListPara">Danh sách tên biến dưới sql</param>
        /// <param name="ListValu">Danh sách các giá trị biến sql</param>
        /// <returns>Trả zề cỉu True False || True là thực thi Oki, False là éo có thực thi đc</returns>
        public bool Update(string SPName, string[] ListPara, object[] ListValu)
        {
            bool Oki = false;
            SqlCommand Cmd = DatabaseStatic.conn.CreateCommand();
            Cmd.CommandText = SPName;
            Cmd.CommandType = CommandType.StoredProcedure;
            Cmd.Transaction = DatabaseStatic.sqltrans;
            try
            {
                SqlParameter YourPara = null;
                for (int i = 0; i < ListPara.Length; i++)
                {
                    YourPara = new SqlParameter(ListPara[i], ListValu[i]);
                    Cmd.Parameters.Add(YourPara);
                }
                Cmd.ExecuteNonQuery();
                Oki = true;
            }
            catch (Exception a)
            {
                Oki = false;
            }
            return Oki;
        }

        /// <summary>
        /// Hàm thực thi câu Delete || Y chan Insert nhưng rãnh rổi zin nông nỏi
        /// </summary>
        /// <param name="SPName">Tên Proc Update</param>
        /// <param name="ListPara">Danh sách tên biến dưới sql</param>
        /// <param name="ListValu">Danh sách các giá trị biến sql</param>
        /// <returns>Trả zề cỉu True False || True là thực thi Oki, False là éo có thực thi đc</returns>
        public bool Delete(string SPName, string[] ListPara, object[] ListValu)
        {
            bool Oki = false;
            SqlCommand Cmd = DatabaseStatic.conn.CreateCommand();
            Cmd.CommandText = SPName;
            Cmd.CommandType = CommandType.StoredProcedure;
            Cmd.Transaction = DatabaseStatic.sqltrans;
            try
            {
                SqlParameter YourPara = null;
                for (int i = 0; i < ListPara.Length; i++)
                {
                    YourPara = new SqlParameter(ListPara[i], ListValu[i]);
                    Cmd.Parameters.Add(YourPara);
                }
                Cmd.ExecuteNonQuery();
                Oki = true;
            }
            catch (Exception)
            {
                Oki = false;
            }
            return Oki;
        }
    }
}
